package br.senai.sc.util;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import com.sun.org.apache.xerces.internal.impl.xs.identity.Selector.Matcher;

import br.senai.sc.dao.GenericDAOImp;
import br.senai.sc.entity.Usuario;

@FacesValidator("UsernameValidate")
public class ValidadorDeUsuario implements Validator {

	@Override
	public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
			throws ValidatorException {
		if (String.valueOf(arg2).replaceAll("\\p{L}", "").length() > 0) {
			FacesMessage msg = new FacesMessage("Usuário Inválido",
					"Digite somente Letras");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			throw new ValidatorException(msg);
		}

		if (!validaUsuario(String.valueOf(arg2))) {
			FacesMessage msg = new FacesMessage("Usuário Inválido",
					"Nome de usuário indisponível");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			throw new ValidatorException(msg);
		}

	}

	private static boolean validaUsuario(String usuario) {
		GenericDAOImp<Usuario, Serializable> dao = new GenericDAOImp<>();
		Usuario user = dao.listByProperty(Usuario.class, "usuario", usuario);
		if (user != null) {
			return false;
		}
		return true;
	}

}
